var BookingView = function() {
    // Util Class
    this.mUtil = null;

    // UI Select 데이터
    this.HTMLDom = null;

    // 예약 종류
    this.reservation = null;
    // 예약 번호
    this.reserv_id = null;
    // 지역
    this.area = null;
    // 예약 데이터
    this.reserv_data = null;

};

BookingView.prototype = {
    constructor : BookingView,
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // InterlockBooking class 에 연동요청
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 실시간 예약 부킹 상세 데이터 가져오는 연동
     */
    getRsvBookingData : function($reserv_id) {
        var thisClass = this;
        var interlockBooking = new InterlockBooking();

        $.mobile.showPageLoadingMsg();

        console.log($reserv_id);

        interlockBooking.getTimeBookingDetailData($reserv_id, function($data) {
            thisClass.reserv_data = $data;
            thisClass.setBookingDetailView($data);
            $.mobile.hidePageLoadingMsg();
        }, function(e) {
            alert("fail :: " + JSON.stringify(e));
            $.mobile.hidePageLoadingMsg();
        });
    },
    /**
     * 예약 요청
     */
    setReservation : function($data, $callbackFnc) {
        var thisClass = this;
        var interlockBooking = new InterlockBooking();

        $.mobile.showPageLoadingMsg();
        console.log("BookingView setReservation");
        console.log($data);

        interlockBooking.setReservation($data, function($jsonData) {
            var objJson = new MJson();

            alert("setReservation success :: " + JSON.stringify($jsonData));
            // TODO :: TEST 동일한 예약 건수 예외 처리 패스(테스트용도)
            if (true) {
                // if (objJson.checkServiceResult($jsonData)) {
                // 콜백 함수 호출
                $callbackFnc();
            } else {
                console.log("getRealTimeListData error");
                console.log($jsonData);
            }

            $.mobile.hidePageLoadingMsg();
        }, function(e) {
            alert("fail :: " + JSON.stringify(e));
            $.mobile.hidePageLoadingMsg();
        });
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Method
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    setBookingDetailView : function($data) {
        var data = $data;
        var thisClass = this;

        var title = this._HTMLDom.top_article.title_layer;
        var hole = this._HTMLDom.top_article.hole;
        var date = this._HTMLDom.top_article.date;

        var price_old = this._HTMLDom.top_article.price_old;
        var arrow = this._HTMLDom.top_article.arrow;
        var greenfee = this._HTMLDom.top_article.greenfee;
        var price = this._HTMLDom.top_article.price;

        var price_pay = this._HTMLDom.top_article.price_pay;

        var btn_group = this._HTMLDom.btn_group;
        var btn_block_0 = this._HTMLDom.btn_block_0;
        var btn_block_1 = this._HTMLDom.btn_block_1;

        var event_greenfee = this._HTMLDom.event_greenfee;
        var event_cartfee = this._HTMLDom.event_cartfee;
        var evnet_food = this._HTMLDom.evnet_food;
        var event_present = this._HTMLDom.event_present;
        var event_mail = this._HTMLDom.event_mail;
        var event_etc = this._HTMLDom.event_etc;

        var i = 0;
        var dateStr = "" + data.reserv_date;
        var timeStr = "" + data.reserv_time;
        var tempStr = "";

        title.empty();

        // 클럽 이름
        tempStr = data.club_name;

        while (i < data.course_name.length) {
            if (data.course_name[i] != undefined) {
                tempStr += " " + data.course_name[i];
            }
            i++;
        }
        title.html(tempStr);

        // 홀
        hole.html(" " + data.hole + "H");
        title.append(hole);

        // 날짜, 시간
        date.html(dateStr.substr(0, 4) + "." + dateStr.substr(4, 2) + "." + dateStr.substr(6, 2) + "(" + data.reserv_day + ") " + timeStr.substr(0, 2) + ":" + timeStr.substr(2, 2));
        title.append(date);
        
        if (data.price > data.greenfee_pay && data.greenfee_pay != undefined) {
            // 할인가가 정가보다 저렴할때
            price.hide();
            // 정가
            price_old.find('span').html(this.mUtil.getMoneyTypeNum(data.price) + " 원");

            // 할인가
            greenfee.find('mark').html(this.mUtil.getMoneyTypeNum(data.greenfee_pay));
        } else {
            // 할인가와 정가가 같거나 할인가가 클때
            price_old.hide();
            arrow.hide();
            greenfee.hide();

            price.find('span > mark').html(this.mUtil.getMoneyTypeNum(data.price));
        }

        // 가승인 결재 금액
        price_pay.html("￦ " + this.mUtil.getMoneyTypeNum(data.price_pay));

        // 그린피
        if (data.greenfee == undefined || data.greenfee.use == "N") {
            event_greenfee.hide();
        } else {
            event_greenfee.find("div:last").html(data.greenfee.amount);
        }

        // 카트피
        if (data.cartfee == undefined || data.cartfee.use == "N") {
            event_cartfee.hide();
        } else {
            event_cartfee.find("div:last").html(data.cartfee.amount);
        }

        // 식사
        if (data.food == undefined || data.food.use == "N") {
            evnet_food.hide();
        } else {
            evnet_food.find("div:last").html(data.food.amount);
        }

        // 선물
        if (data.present == undefined || data.present.use == "N") {
            event_present.hide();
        } else {
            event_present.find("div:last").html(data.present.amount);
        }

        // 마일리지는 현재 연동문서 상으로 없기에 기본적으로 표시 안함
        event_mail.hide();

        // 기타
        if (data.etc == undefined || data.etc.use == "N") {
            event_etc.hide();
        } else {
            event_etc.find("div:last").html(data.etc.amount);
        }

        // 예약 상태따른 버튼 이벤트 처리
        switch(data.status) {
            case "W" :
            case "C" : {
                // 예약 대기, 예약 취소 상태 일경우는 초기 예약 대기 상태로
                // 버튼 셋팅
                // 확정예약 :: 가예약
                btn_group.eq(2).parent().hide();
                btn_group.eq(3).parent().hide();

                // 확정 예약 버튼
                btn_group.eq(0).click(function() {
                    console.log("확정예약");
                    // TODO :: Alert 창을 Phonegap Alert으로 수정해야 함.
                    if (window.localStorage.getItem(document.globalObj.STORAGE_KEY.booking_payment_agree)) {
                        // 이미 동의 했을 경우
                        $.mobile.changePage("booking_account.html");
                    } else {
                        // 동의 안했을 경우
                        $.mobile.changePage("booking_set_pop.html");
                    }

                });
                // 가예약 버튼
                btn_group.eq(1).click(function() {
                    var pop = new Popup();
                    pop.confirm("골프인", "가예약 하시겠습니까?\n예약일 5일전 가승인 결제를 하시지 않으면 자동으로 예약이 취소됩니다.", "확인, 취소", function(index) {
                        if (index == 1) {
                            // 확인 버튼을 눌렀을 경우
                            console.log("가예약");
                            var reserv_data = {
                                reserv_id : thisClass.reserv_id,
                                reserv_status : "P"
                            };
                            thisClass.setReservation(reserv_data, function() {
                                var data = {
                                    // 예약 번호
                                    reserv_id : thisClass.reserv_id,
                                    // 예약 타입
                                    reserv_type : "P"
                                };
                                document.globalObj.BOOKING_DATA.account_ok = data;
                                $.mobile.changePage("booking_account_ok.html");
                            });
                        }
                    });

                });
                break;
            }
            case "P" : {
                // 가예약 중
                // 버튼 셋팅
                // 확정예약 :: 가예약 취소
                btn_group.eq(2).parent().hide();
                btn_group.eq(3).parent().hide();
                btn_group.eq(1).html("가예약 취소");

                break;
            }
            case "G" : {
                // 보증(확정) 예약 상태
                // 버튼 셋팅
                // 예약 취소
                btn_block_0.hide();
                btn_block_1.hide();
                btn_group.eq(3).parent().hide();
                break;
            }
            case "A" : {
                // 가예약 완료
                // 버튼 셋팅
                // 확정 예약
                btn_block_0.hide();
                btn_block_1.hide();
                btn_group.eq(2).parent().hide();
                break;
            }

        }

    },
    /**
     * 필요한 테이터 셋팅
     */
    setData : function($data) {
        this.reserv_id = $data.bookingview.reserv_id;
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Initialize
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    onPageShow : function() {
        console.log("BookingView onPageBeforeShow!");
        var thisClass = this;

        this.mUtil = document.globalObj.util;

        // 부킹 상세 보기 관련 데이터 셋팅 및 초기화
        this.setData(document.globalObj.BOOKING_DATA);

        // 부킹 상세 데이터 가져오기
        this.getRsvBookingData(this.reserv_id);

        var $layer = $('#booking_detail_contents');
        var article_layer = $layer.find("article:first");
        var contents_layer = article_layer.find("div:first");
        var btn_layer = $('#booking_btn_layer');
        var event_layer = $('#booking_event');

        this._HTMLDom = {
            // 상단 Article
            "top_article" : {
                "title_layer" : article_layer.find("h5"), // 타이틀
                "hole" : article_layer.find("h5 > em"), // 홀
                "date" : article_layer.find("h5 > mark"), // 날짜
                "price_old" : contents_layer.find("div:first"), // 할인 이전가
                "arrow" : contents_layer.find('div:eq(1)'), // 화살표
                "greenfee" : contents_layer.find("div:eq(2)"), // 할인가
                "price" : contents_layer.find('div:last'), // 정상가
                "price_pay" : article_layer.find("div:last > mark"),        // 가승인 결재 금액
            },
            // 버튼  그룹
            "btn_group" : $('#booking_btn_layer').find('button'),
            // 버튼 블록
            "btn_block_0" : $('#booking_btn_layer').find('div.ui-block-a'),
            "btn_block_1" : $('#booking_btn_layer').find('div.ui-block-b'),
            // 이벤트 항목
            "event_greenfee" : event_layer.find('li:eq(1)'), // 그린피
            "event_cartfee" : event_layer.find('li:eq(2)'), // 카트피
            "evnet_food" : event_layer.find('li:eq(3)'), // 식사
            "event_present" : event_layer.find('li:eq(4)'), // 선물
            "event_mail" : event_layer.find('li:eq(5)'), // 마일리지
            "event_etc" : event_layer.find('li:eq(6)') // 기타
        };
        
        // 버튼 이벤트
        // 주의사항
        $('#go_booking_help').click(function() {
            $.mobile.changePage("booking_help.html");
        });

        // 코스 상세 정보
        $('#go_booking_course').click(function() {
            document.globalObj.BOOKING_DATA.courseInfo.reserv_id = thisClass.reserv_data.reserv_id;
            $.mobile.changePage("booking_view_course.html");
        });

        // 가격 정보
        $('#go_booking_price').click(function() {
            var data = {
                area : thisClass.area,
                reserv_id : thisClass.reserv_data.reserv_id,
                club_id : thisClass.reserv_data.club_id,
                course_id : thisClass.reserv_data.course_id
            };
            
            console.log(data);
            document.globalObj.BOOKING_DATA.coursePrice = data;

            $.mobile.changePage("booking_view_price.html");
        });

        // 페널티 안내
        $('#go_booking_penalty').click(function() {
            $.mobile.changePage("booking_view_penalty.html");
        });

    }
};

